package b_object;

/**
 * @author Cheng-02
 * @version V1.0
 * @Package b_object
 * @date 2024/4/1 下午12:15
 */
public class Person implements Cloneable {

    private String name;
    private int age;

    public Person() {

    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    /*
     * 问题1：obj直接调用name和age调用不了，会出现类型转换异常
     * 解决问题1：向下转型
     *
     * 问题2：如果传递的不是Perosn类型,会出现类型转换异常
     * 解决问题2：使用instanceof判断类型，如果是Person类型，则向下转型
     *
     * 问题3:如果传递null，就不用判断类型，直接返回false
     * 解决问题3：直接返回false
     * 问题4:如果传递的是同一个对象，则直接返回true
     * 解决问题4：直接返回true
     * */
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (this == obj)
        {
            return true;
        }

        if (obj instanceof Person) {
            //向下转型
            Person p = (Person) obj;
            return this.name.equals(p.name) && this.age == p.age;
        }
        return false;
    }
        @Override
        public Object clone() throws CloneNotSupportedException {
            return super.clone();
        }
}
